package com.afdor.rws.event.channel.filter;

import com.afdor.rws.annotation.extension.SPI;
import com.afdor.rws.event.Event;
import lombok.NonNull;

/**
 * 事件拦截器链
 *
 * @author 悭梵
 * @date Created in 2018-08-20 10:16
 */
@SPI("default")
public interface EventInterceptChain {


    /**
     * 拦截，终止执行
     *
     * @return
     */
    boolean isIntercept();

    /**
     * 拦截，终止执行
     *
     * @return
     */
    void intercept();

    /**
     * 生成新的副本
     *
     * @return
     */
    EventInterceptChain copy();

    /**
     * 执行拦截操作
     *
     * @param event
     */
    void doIntercept(@NonNull Event event);

    /**
     * 添加拦截器
     *
     * @param addIntercept
     * @return
     */
    EventInterceptChain addIntercept(@NonNull EventIntercept addIntercept);

    /**
     * 销毁
     */
    void destroy();

}
